/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package documentadorrepositorio.apresentacao;

import documentadorrepositorio.artefatos.Artefato;
import documentadorrepositorio.artefatos.Projeto;
import documentadorrepositorio.descritoresArtefatos.DescritorArtefato;
import documentadorrepositorio.exportacao.Exportacao;
import documentadorrepositorio.exportacaoAdapterTexto.ExportacaoTextoWord;
import documentadorrepositorio.fabricaArtefatos.FabricaDescritorArtefatos;
import documentadorrepositorio.interfaceGrafica.AjudaUI;
import documentadorrepositorio.interfaceGrafica.PrincipalIG;
import documentadorrepositorio.repositorio.AnalisadorRepositorio;
import documentadorrepositorio.repositorio.IGerenciadorRepositorio;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

/**
 *
 * @author DEP
 */
public class PrincipalIGApresentacao
{

    private PrincipalIG frame = null;
    private IGerenciadorRepositorio gerenciadorRepositorio;
    private AnalisadorRepositorio analisadorRepositorio;

    public PrincipalIGApresentacao(IGerenciadorRepositorio gerenciadorRepositorio,
            AnalisadorRepositorio analisadorRepositorio)
    {
        try
        {
            this.gerenciadorRepositorio = gerenciadorRepositorio;
            this.analisadorRepositorio = analisadorRepositorio;

            frame = new PrincipalIG();
            frame.setVisible(true);

            frame.setExtendedState(JFrame.MAXIMIZED_BOTH);

            adicionaListeners();
            carregaDados();

        } catch (Exception ex)
        {
            ex.printStackTrace();
            JOptionPane.showMessageDialog(frame, ex.getMessage());
        }
    }

    private void btnGerar_Clicked()
    {
        try
        {
            SelecionarOrdemArtefatos a = new SelecionarOrdemArtefatos(this.frame, this.analisadorRepositorio.getArtefatos());
            a.setVisibleTela(frame);

            List<Artefato> artefatos = new ArrayList<>();

            for (int i = 0; i < a.lista.size(); i++)
            {
                for (Map.Entry<DescritorArtefato, List<Artefato>> entry : this.analisadorRepositorio.getArtefatos().entrySet())
                {
                    if (entry.getValue().size() > 0)
                    {
                        if (entry.getValue().get(0).getTipo().equals(a.lista.get(i).getTipo()))
                        {
                            artefatos.addAll(entry.getValue());
                            break;
                        }
                    }
                }

            }

            String diretorio = "";

            JFileChooser fc = new JFileChooser();

            fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);

            int res = fc.showOpenDialog(frame);

            if (res == JFileChooser.APPROVE_OPTION)
            {
                diretorio = fc.getSelectedFile().getAbsolutePath();
            }

            diretorio += "\\Documentacao.docx";
            Exportacao exportacao = new Exportacao();
            exportacao.GeraDocumentacao(a.variaveisCapa, diretorio, new Projeto(), new ExportacaoTextoWord(), artefatos);
            File f = new File(diretorio);
            if (JOptionPane.showConfirmDialog(frame, "Documento gerado com sucesso em: "
                    + diretorio + ".\nDeseja visualiza-lo ?",
                    "Geração da Documentação",
                    JOptionPane.YES_NO_OPTION,
                    JOptionPane.QUESTION_MESSAGE) == JOptionPane.YES_OPTION)
            {
                Process p = Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + diretorio);
            }
        } catch (Exception ex)
        {
        }

    }

    private void adicionaListeners()
    {
        this.frame.getBtnConfiguracao().addActionListener(new ActionListener()
        {

            @Override
            public void actionPerformed(ActionEvent e)
            {
                btnAbrirConfig_Clicked();
            }
        });

        this.frame.getBtnObterDados().addActionListener(new ActionListener()
        {

            @Override
            public void actionPerformed(ActionEvent e)
            {
                btnObterDados_Click();
            }
        });

        this.frame.getBtnGerarDocumentacao().addActionListener(new ActionListener()
        {

            @Override
            public void actionPerformed(ActionEvent e)
            {
                btnGerar_Clicked();
            }
        });

        this.frame.getBtnAjuda().addActionListener(new ActionListener()
        {

            @Override
            public void actionPerformed(ActionEvent e)
            {
                btnAjuda_Clicked();
            }
        });

        /*
        new TableCellListener(this.frame.getPainelRequisitoFuncional().getTblArtefato(),new AbstractAction() {
        
        @Override
        public void actionPerformed(ActionEvent e) {
        valorCelulaRequisitoAlterado(e);
        }
        });*/
    }

    private void btnAjuda_Clicked()
    {
        Ajuda a = new Ajuda(frame);
        a.setVisibleTela(frame);
    }

    private void btnObterDados_Click()
    {
        //new CarregandoDadosApresentacao(gerenciadorRepositorio);
        this.frame.dispose();
        SelecionarCaminhoApresentacao.getFrame().setVisible(true);
    }

    /*
    private void alteraClassificacaoArtefato(DescritorArtefato descritorOrigem, DescritorArtefato descritorDestino, Artefato artefato)
    {
    
    }
    
    private void valorCelulaRequisitoAlterado(ActionEvent e)
    {
    TableCellListener cellListener = (TableCellListener)e.getSource();
    if(cellListener.getColumn()== 4)
    {
    if(cellListener.getOldValue() != null)
    {
    if(!cellListener.getOldValue().toString().isEmpty())
    {
    if(cellListener.getOldValue() != cellListener.getNewValue())
    {
    JOptionPane.showMessageDialog(frame, "Mudou");
    }
    }
    }       
    }
    }*/
    private void btnAbrirConfig_Clicked()
    {
        new ConfiguracaoApresentacao();
    }

    private void carregaDados() throws Exception
    {
        for (DescritorArtefato descritorArtefato : FabricaDescritorArtefatos.getInstance().obtemDescritoresArtefatos())
        {
            descritorArtefato.instanciarTela(analisadorRepositorio, descritorArtefato, frame);
//            carregaArtefatos(descritorArtefato, (PainelListaArtefatos) cmp);
        }
    }
//    private void carregaArtefatos(DescritorArtefato descritorArtefato, PainelListaArtefatos painelArtefatos) {
//        List<Artefato> artefatos = this.analisadorRepositorio.getArtefatos().get(descritorArtefato);
//        DefaultTableModel modeloTabela = ((DefaultTableModel) painelArtefatos.getTblArtefato().getModel());
//        SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
//        if (artefatos != null) {
//            for (Artefato artefato : artefatos) {
//                modeloTabela.addRow(new Object[]{
//                    artefato.getNumeroArtefato(),
//                    artefato.getNomeArtefato(),
//                    dateFormat.format(artefato.getDataCommit()),
//                    artefato.getReview(),
//                    //descritorArtefato.obtemTipoArtefato(), 
//                    true
//                });
//            }
//        }
//    }
}
